package com.vecspace.security.model;



/**从ThreadLocal中获取登录信息<br>
 * 在获取登陆信息之前，需要先调用setLoginContextFromSession（如果登陆信息需要从其他地方获取，则扩展并调用相应的函数）。
 * @version 1.0
 * @author wanghua
 */
public class LoginContext {
//	private static Logger logger = LoggerFactory.getLogger(LoginContext.class);
	
	private String loginId;
	private Long userId;
	private Long tenantId;
	
	private static ThreadLocal<LoginContext> loginContextThreadLocal = new ThreadLocal<LoginContext>();
	private static ThreadLocal<LoginContext> getLoginContextThreadLocal() {
		if(loginContextThreadLocal.get() == null){
			LoginContext ctx = new LoginContext();
			loginContextThreadLocal.set(ctx);
		}
		return loginContextThreadLocal;
	}
	
	/**用于清除线程变量（在有线程池的情况下，必须先remove之后再使用）
	 *   
	 * @author: wanghua
	 */
	public static void clear() {
		if(loginContextThreadLocal != null) {
			loginContextThreadLocal.remove();
		}
	}
	
	/**从Session中获取登陆id，写入ThreadLocal中，后续可以在Service等其他代码中，通过LoginContext.getLoginId() 获取登陆信息 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月30日 下午3:58:28
	 */
	public static void setLoginContextFromSession() {
		String loginId = HttpSessionContext.getLoginId();
		Long userId = HttpSessionContext.getLoginAuthUserId();
		Long tenantId = HttpSessionContext.getTenantId();
		LoginContext loginContext = getLoginContextThreadLocal().get();
		loginContext.loginId = loginId;
		loginContext.userId = userId;
		loginContext.tenantId = tenantId;
	}
	
	/**从ThreadLocal中获取loginId
	 * 
	 * @return 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月30日 下午4:05:26
	 */
	public static String getLoginId() {
		LoginContext loginContext = getLoginContextThreadLocal().get();
		return loginContext.loginId;
	}
	
	/**从ThreadLocal中获取userId
	 * 
	 * @return 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月30日 下午4:05:17
	 */
	public static Long getUserId() {
		LoginContext loginContext = getLoginContextThreadLocal().get();
		return loginContext.userId;
	}
	

	/**从ThreadLocal中获取tenantId
	 * 
	 * @return 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月30日 下午4:04:57
	 */
	public static Long getTenantId() {
		LoginContext loginContext = getLoginContextThreadLocal().get();
		return loginContext.tenantId;
	}
}
